Expose RDTSCP CPUID to guest only when tsc_mode == TSC_MODE_DEFAULT
and host_tsc_is_safe() returns 1.
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
}
break;
case 0x80000001:
- /* Don't expose RDTSCP feature when in PVRDTSCP mode. */
- if ( v->domain->arch.tsc_mode == TSC_MODE_PVRDTSCP )
+ /* We expose RDTSCP feature to guest only when
+ tsc_mode == TSC_MODE_DEFAULT and host_tsc_is_safe() returns 1 */
+ if ( v->domain->arch.tsc_mode != TSC_MODE_DEFAULT ||
+ !host_tsc_is_safe() )
*edx &= ~bitmaskof(X86_FEATURE_RDTSCP);
break;
}
(d->arch.tsc_mode == TSC_MODE_PVRDTSCP) ? d->arch.incarnation : 0;
}
-static int host_tsc_is_safe(void)
+int host_tsc_is_safe(void)
{
if ( boot_cpu_has(X86_FEATURE_TSC_RELIABLE) )
return 1;
void force_update_vcpu_system_time(struct vcpu *v);
+int host_tsc_is_safe(void);
void cpuid_time_leaf(uint32_t sub_idx, unsigned int *eax, unsigned int *ebx,
unsigned int *ecx, unsigned int *edx);